// nc63 [简单]扑克牌顺子
// https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4
//有2副扑克牌，从扑克牌中随机五张扑克牌，我们需要来判断一下是不是顺子。
//有如下规则：
// 1.A为1，J为11，Q为12，K为13，A不能视为14
// 2.大小王为 0，0可以看作任意牌
// 3.如果给出的五张牌能组成顺子（即这五张牌是连续的）就输出true，否则就输出false。
// 4.数据保证每组5个数字，每组最多含有4个零，数组的数取值为 [0, 13]
//要求：空间复杂度 O(1)，时间复杂度 O(nlogn)
//输入五张扑克牌的值
//返回五张扑克牌能否组成顺子。
//输入：[6,0,2,0,4]
//返回值：true
//中间的两个0一个看作3，一个看作5 。即：[6,3,2,5,4]
//这样这五张牌在[2,6]区间连续，输出true
//输入：[0,3,2,6,4]
//返回 true
//输入：[1,0,0,1,0]
//返回 false
//输入：[13,12,11,0,1]
//返回值：false

#include <bits/stdc++.h>
using namespace std;

class Solution {
 public:
  bool IsContinuous(vector<int> numbers) {
    set<int> st;
    int _min = 100;
    int _max = 0;
    for (auto i : numbers) {
      if (i == 0) continue;
      _min = min(_min, i);
      _max = max(_max, i);
      if (st.count(i)) {
        return false;
      }
      st.insert(i);
    }
    return _max < _min + 5;
  }
};
